iT邦幫忙

3

[python] 100天從新手變.... (Day05)

  • 分享至 

  • xImage
  •  

Hello呀,這是一個培養寫程式習慣的練習。
先前有試著每天學習一次線上課程,但學到後面就忘記前面,
自省缺少學習記錄,也沒有養成每天寫程式的習慣。
所以這次換個方式:每日固定的課程加學習記錄整理及分享。
看看是否比較能培養出寫程式的習慣

目前鎖定的練習標的物是 100天從新手到大師
歡迎各位前輩指導!!在此先謝謝了!

1. 心得
1.解一個題目可以分為四個步驟:
a.理解題意 b.寫下解題步驟 c.轉換為偽代碼 d.寫出程式碼
程式不會寫的可分為兩種,一種是思路未想透徹,另一種是不會寫程式碼。
先釐清自己是卡在哪一個環節比較好對症下藥。

2.這一次有試著將看到題目的思路寫下來,我想多思考多記錄會有幫助的。
在寫思路的時候就知道,有些題目是連思路都還沒想出來就卡住。

小語

決不能放棄,世界上沒有失敗,只有放棄。

2. 本日學習摘要
Day05 - 構造程序邏輯
經典案例:水仙花數/ 百錢百雞/ Craps賭博遊戲
練習題目:斐波那契數列/ 完美數/ 質數

3. 程式碼

#尋找所有水仙花數
"""
說明:水仙花數也被稱為超完全數字不變數、自戀數、自冪數、阿姆斯特朗數,
它是一個3位數,該數字每個位上數字的立方之和正好等於它本身,
例如: 1^3 + 5^3+ 3^3=153。
"""
"""
思路
Step1.定義範圍 Range(100,1000)
Step2.拆解個位數(c)、十位數(b)、百位數(a)
Setp3.設定方程式 a^3 + b^3 + c^3 = a*100 + b*10 + c*1
"""

for num in range(100,1000,1):
    low = num % 10
    mid = num // 10 % 10
    high = num // 100
    if num == low ** 3 + mid ** 3 + high ** 3:
        print(num)

1

#正整數的反轉
"""
例如12345經過程式後變為54321
"""
"""
思路
Step1.使用者輸入正整數
Step2.定義反轉數=0
Step3.正整數除以10取餘數,放入反轉數
Step4.
使用while迴圈,當正整數大於零,則反轉數 = 反轉數*10 + 正整數除以10的餘數
"""
num = int(input('請輸入正整數:'))
reverse_num = 0
while num > 0:
    reverse_num = reverse_num *10 + num % 10
    print(reverse_num,num)
    num //= 10
    print(num)
print(reverse_num)

2

#百元百雞
"""
公雞一隻5元、母雞一隻3元、小雞三隻一元
用一百元買一百隻雞,請問公雞、母雞、小雞各幾隻
"""

"""
思路
step1. 聯立方程式
       5a + 3b + c/3 = 100
        a + b + c = 100
step2. a的範圍為0~20 (用range)
       b的範圍為0~33 (用range)
step3. c可寫為 100 - a - b
step4 當 5a + 3b + c/3 == 100時,就是答案
"""
for a in range(0,20):
    for b in range(0,33):
        c = 100 - a - b
        if 5 * a + 3 * b + c / 3 == 100:
            print("公雞:%d隻,母雞:%d隻,小雞:%d隻" %(a,b,c))

3

#CRAPS賭博遊戲
"""
玩家第一次搖骰子如果搖出了7點或11點,玩家勝;
玩家第一次如果搖出2點、3點或12點,莊家勝;
其他點數玩家繼續搖骰子,如果玩家搖出了7點,
莊家勝;如果玩家搖出了第一次搖的點數,
玩家勝;其他點數,玩家繼續要骰子,直到分出勝負。
"""

"""
設定玩家開始遊戲時有1000元
遊戲結束條件是玩家輸光所有賭注
"""
from random import randint
money = 1000
while money > 0 :
    print("你的總資產:", money)
    needs_go_on = False
    while True:
        debt = int (input ("請下注:"))
        if 0 < debt <= money:
            break
    first = randint(1,6 ) + randint(1,6)
    print("玩家搖出%d點" %first)
    if first == 7 or first == 11:
        print("玩家勝!")
        money += debt
    elif first == 2 or first == 3 or first == 12:
        print("莊家勝!")
        money -= debt
    else:
        needs_go_on = True
    while needs_go_on :
        needs_go_on = False
        current = randint(1,6) + randint(1,6)
        print("玩家搖出了%d點" %current)
        if current == 7:
            print('莊家勝')
            money -= debt
        elif current == first:
            print('玩家勝')
            money += debt
        else:
            needs_go_on = True
print("你破產了,遊戲結束")

4

#練習:生成斐波那契數列的前20個數。
"""
斐波那契數列的特點是數列的前兩個數都是1,從第三個數開始,
每個數都是它前面兩個數的和,形如:1, 1, 2, 3, 5 , 8, 13, 21, 34, 55, 89, 144
"""

"""
思路
step1. 定義數學式 A(n) + A(n+1) = A(n+2)
step2. A(n) = 1, A(n+1) = 1
step3. for 迴圈進行20次
step4. print A(n+2)
"""

count = 0
An = 1
An2 = 1
print(An)
print(An2)
while count < 18: 
    count = count + 1
    Anew = An + An2
    An = An2
    An2 = Anew
    print(Anew)
    continue

5

#練習:找出10000以內的完美數。
"""
所有的真因子(即除了自身以外的因子)的和(即因子函數)恰好等於它本身。
例如:6($6=1+2+3$)和28($28=1+2+4+7+14$)就是完美數。
"""
import math
for num in range(1, 10000):
    result = 0
    for factor in range(1, int(math.sqrt(num)) + 1):
        if num % factor == 0:
            result += factor
            if factor > 1 and num // factor != factor:
                result += num // factor
    if result == num:
        print(num)
![6](https://ithelp.ithome.com.tw/upload/images/20200505/20126777huSmE80tWP.jpg)
#輸出100以內所有的質數。
from math import sqrt

for num in range(2, 101):
    end = int(sqrt(num))
    is_prime = True
    for x in range(2, end+1): 
        if num % x == 0 :
            is_prime = False
            break
    if is_prime and num != 1:
        print(num)

7

參考資料:Day05


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言